home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / mmc / card.h next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.3 KB  |  154 lines

  1. /*
  2.  *  linux/include/linux/mmc/card.h
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify
  5.  * it under the terms of the GNU General Public License version 2 as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  *  Card driver specific definitions.
  9.  */
  10. #ifndef LINUX_MMC_CARD_H
  11. #define LINUX_MMC_CARD_H
  12.  
  13. #include <linux/mmc/core.h>
  14.  
  15. struct mmc_cid {
  16.     unsigned int        manfid;
  17.     char            prod_name[8];
  18.     unsigned int        serial;
  19.     unsigned short        oemid;
  20.     unsigned short        year;
  21.     unsigned char        hwrev;
  22.     unsigned char        fwrev;
  23.     unsigned char        month;
  24. };
  25.  
  26. struct mmc_csd {
  27.     unsigned char        mmca_vsn;
  28.     unsigned short        cmdclass;
  29.     unsigned short        tacc_clks;
  30.     unsigned int        tacc_ns;
  31.     unsigned int        r2w_factor;
  32.     unsigned int        max_dtr;
  33.     unsigned int        read_blkbits;
  34.     unsigned int        write_blkbits;
  35.     unsigned int        capacity;
  36.     unsigned int        read_partial:1,
  37.                 read_misalign:1,
  38.                 write_partial:1,
  39.                 write_misalign:1;
  40. };
  41.  
  42. struct mmc_ext_csd {
  43.     unsigned int        hs_max_dtr;
  44.     unsigned int        sectors;
  45. };
  46.  
  47. struct sd_scr {
  48.     unsigned char        sda_vsn;
  49.     unsigned char        bus_widths;
  50. #define SD_SCR_BUS_WIDTH_1    (1<<0)
  51. #define SD_SCR_BUS_WIDTH_4    (1<<2)
  52. };
  53.  
  54. struct sd_switch_caps {
  55.     unsigned int        hs_max_dtr;
  56. };
  57.  
  58. struct sdio_cccr {
  59.     unsigned int        sdio_vsn;
  60.     unsigned int        sd_vsn;
  61.     unsigned int        multi_block:1,
  62.                 low_speed:1,
  63.                 wide_bus:1,
  64.                 high_power:1,
  65.                 high_speed:1;
  66. };
  67.  
  68. struct sdio_cis {
  69.     unsigned short        vendor;
  70.     unsigned short        device;
  71.     unsigned short        blksize;
  72.     unsigned int        max_dtr;
  73. };
  74.  
  75. struct mmc_host;
  76. struct sdio_func;
  77. struct sdio_func_tuple;
  78.  
  79. #define SDIO_MAX_FUNCS        7
  80.  
  81. /*
  82.  * MMC device
  83.  */
  84. struct mmc_card {
  85.     struct mmc_host        *host;        /* the host this device belongs to */
  86.     struct device        dev;        /* the device */
  87.     unsigned int        rca;        /* relative card address of device */
  88.     unsigned int        type;        /* card type */
  89. #define MMC_TYPE_MMC        0        /* MMC card */
  90. #define MMC_TYPE_SD        1        /* SD card */
  91. #define MMC_TYPE_SDIO        2        /* SDIO card */
  92.     unsigned int        state;        /* (our) card state */
  93. #define MMC_STATE_PRESENT    (1<<0)        /* present in sysfs */
  94. #define MMC_STATE_READONLY    (1<<1)        /* card is read-only */
  95. #define MMC_STATE_HIGHSPEED    (1<<2)        /* card is in high speed mode */
  96. #define MMC_STATE_BLOCKADDR    (1<<3)        /* card uses block-addressing */
  97.  
  98.     u32            raw_cid[4];    /* raw card CID */
  99.     u32            raw_csd[4];    /* raw card CSD */
  100.     u32            raw_scr[2];    /* raw card SCR */
  101.     struct mmc_cid        cid;        /* card identification */
  102.     struct mmc_csd        csd;        /* card specific */
  103.     struct mmc_ext_csd    ext_csd;    /* mmc v4 extended card specific */
  104.     struct sd_scr        scr;        /* extra SD information */
  105.     struct sd_switch_caps    sw_caps;    /* switch (CMD6) caps */
  106.  
  107.     unsigned int        sdio_funcs;    /* number of SDIO functions */
  108.     struct sdio_cccr    cccr;        /* common card info */
  109.     struct sdio_cis        cis;        /* common tuple info */
  110.     struct sdio_func    *sdio_func[SDIO_MAX_FUNCS]; /* SDIO functions (devices) */
  111.     unsigned        num_info;    /* number of info strings */
  112.     const char        **info;        /* info strings */
  113.     struct sdio_func_tuple    *tuples;    /* unknown common tuples */
  114.  
  115.     struct dentry        *debugfs_root;
  116. };
  117.  
  118. #define mmc_card_mmc(c)        ((c)->type == MMC_TYPE_MMC)
  119. #define mmc_card_sd(c)        ((c)->type == MMC_TYPE_SD)
  120. #define mmc_card_sdio(c)    ((c)->type == MMC_TYPE_SDIO)
  121.  
  122. #define mmc_card_present(c)    ((c)->state & MMC_STATE_PRESENT)
  123. #define mmc_card_readonly(c)    ((c)->state & MMC_STATE_READONLY)
  124. #define mmc_card_highspeed(c)    ((c)->state & MMC_STATE_HIGHSPEED)
  125. #define mmc_card_blockaddr(c)    ((c)->state & MMC_STATE_BLOCKADDR)
  126.  
  127. #define mmc_card_set_present(c)    ((c)->state |= MMC_STATE_PRESENT)
  128. #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
  129. #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)
  130. #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)
  131.  
  132. #define mmc_card_name(c)    ((c)->cid.prod_name)
  133. #define mmc_card_id(c)        (dev_name(&(c)->dev))
  134.  
  135. #define mmc_list_to_card(l)    container_of(l, struct mmc_card, node)
  136. #define mmc_get_drvdata(c)    dev_get_drvdata(&(c)->dev)
  137. #define mmc_set_drvdata(c,d)    dev_set_drvdata(&(c)->dev, d)
  138.  
  139. /*
  140.  * MMC device driver (e.g., Flash card, I/O card...)
  141.  */
  142. struct mmc_driver {
  143.     struct device_driver drv;
  144.     int (*probe)(struct mmc_card *);
  145.     void (*remove)(struct mmc_card *);
  146.     int (*suspend)(struct mmc_card *, pm_message_t);
  147.     int (*resume)(struct mmc_card *);
  148. };
  149.  
  150. extern int mmc_register_driver(struct mmc_driver *);
  151. extern void mmc_unregister_driver(struct mmc_driver *);
  152.  
  153. #endif
  154.